package com.glinsoft.ticktak.util;

import java.net.URLDecoder;
import java.net.URLEncoder;

public class XOR {



    /**
     * 加密
     * @param content 待加密内容
     * @return 完成加密后的字符串；发生错误则返回null
     */
    public static String encode(final String content){
        try {
            String cc = URLEncoder.encode(content,charset);
            byte[] contentBytes = cc.getBytes(charset);
            byte[] keyBytes = password.getBytes(charset);
            byte dkey = 0;
            for(byte b : keyBytes){
                dkey ^= b;
            }
            byte salt = 0;
            byte[] result = new byte[contentBytes.length];
            for(int i = 0 ; i < contentBytes.length; i++){
                salt = (byte)(contentBytes[i] ^ dkey ^ salt);
                result[i] = salt;
            }
            return new String(result,charset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 解密
     * @param content 密文
     * @return 解密完成的字符串；发生错误则返回null
     */
    public static String decode(final String content){
        try {
            byte[] contentBytes = content.getBytes(charset);
            byte[] keyBytes = password.getBytes(charset);
            byte dkey = 0;
            for(byte b : keyBytes){
                dkey ^= b;
            }
            byte salt;
            byte[] result = new byte[contentBytes.length];
            for(int i = contentBytes.length - 1 ; i >= 0 ; i--){
                if(i == 0){
                    salt = 0;
                }else{
                    salt = contentBytes[i - 1];
                }
                result[i] = (byte)(contentBytes[i] ^ dkey ^ salt);
            }
            return URLDecoder.decode(new String(result,charset),charset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }



    private static final String charset = "UTF-8";

    private static final String  password="㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋" +
            "㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾" +
            "㍙㍚㍛㍜㍝㍞㍟㍠㍡㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㍘" +
            "☰☲☱☴☵☶☳☷" +
            "♠♣♧♡♥❤❥❣♂♀✲☀☼☾☽◐◑☺☻☎☏✿❀№↑↓←→√×÷★℃℉°◆◇⊙■□△▽¿½☯✡㍿卍卐♂♀✚〓㎡♪♫♩♬㊚㊛囍㊒㊖Φ♀♂‖$@*&#※卍卐Ψ♫♬♭♩♪♯♮⌒¶∮‖€￡¥$" +
            "﹢﹣×÷±/=≌∽≦≧≒﹤﹥≈≡≠=≤≥<>≮≯∷∶∫∮∝∞∧∨∑∏∪∩∈∵∴⊥∥∠⌒⊙√∟⊿㏒㏑%‰⅟½⅓⅕⅙⅛⅔⅖⅚⅜¾⅗⅝⅞⅘≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩⊰⊱⋛⋚∫∬∭∮∯∰∱∲∳%℅‰‱øØπ" +
            "↑↓←→↖↗↘↙↔↕➻➼➽➸➳➺➻➴➵➶➷➹▶►▷◁◀◄«»➩➪➫➬➭➮➯➱⏎➲➾➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨↚↛↜↝↞↟↠↠↡↢↣↤↤↥↦↧↨⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇖⇗⇘⇙⇜↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹☇☈↼↽↾↿⇀⇁⇂⇃⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪↺↻⇚⇛" +
            "─ ━│┃╌╍╎╏┄ ┅┆┇┈ ┉┊┋┌┍┎┏┐┑┒┓└ ┕┖┗ ┘┙┚┛├┝┞┟┠┡┢┣ ┤┥┦┧┨┩┪┫┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╪ ╫ ╬═║╒╓╔ ╕╖╗╘╙╚ ╛╜╝╞╟╠ ╡╢╣╤ ╥ ╦ ╧ ╨ ╩ ╳╔ ╗╝╚ ╬ ═ ╓ ╩ ┠ ┨┯ ┷┏ ┓┗ ┛┳ ⊥ ﹃ ﹄┌ ╮ ╭ ╯╰" +
            "北京市，天津市，上海市，重庆市，河北省，山西省，辽宁省，吉林省，黑龙江省，江苏省，浙江省，安徽省，福建省，江西省，山东省，河南省，湖北省，湖南省，广东省，海南省，四川省，贵州省，云南省，陕西省，甘肃省，青海省，台湾省，内蒙古自治区，广西壮族自治区，西藏自治区，宁夏回族自治区，新疆维吾尔自治区，香港特别行政区，澳门特别行政区" +
            "密码是：123456";


}
